﻿
namespace SistemaLogistica.DataAccess
{
    using System.Collections.Generic;
    using System.Data;
    using System.Data.Common;
    using SistemaLogistica.Business.Entities;

    public class MenusData : BaseDataAccess
    {
        private MenusData() { }

        private readonly static MenusData instancia = new MenusData();

        public static MenusData Instancia
        {
            get { return instancia; }
        }

        public List<Menus> ListarPorContenedor(byte? contenedorID)
        {
            List<Menus> menus = new List<Menus>();
            
            DbCommand command = db.GetStoredProcCommand("GetMenusByContenedor");
            db.AddInParameter(command, "contenedorID", DbType.Int32, contenedorID);

            using (IDataReader dr = db.ExecuteReader(command))
            {
                while (dr.Read())
                {
                    menus.Add(new Menus
                    {
                        Descripcion = dr.GetString(dr.GetOrdinal("Descripcion")),
                        Estado = dr.GetBoolean(dr.GetOrdinal("Estado")),
                        IdMenu = dr.GetByte(dr.GetOrdinal("IdMenu")),
                        IdMenudPadre = contenedorID.HasValue ? dr.GetByte(dr.GetOrdinal("IdMenudPadre")) : contenedorID,
                        Namespace = dr.GetString(dr.GetOrdinal("Namespace")),
                        Nombre = dr.GetString(dr.GetOrdinal("Nombre"))
                    });
                }
            }
            return menus;
        }

        public Menus ObtenerPorID(byte? menuID)
        {
            Menus menu = new Menus();

            DbCommand command = db.GetStoredProcCommand("GetMenusByIdMenu");
            db.AddInParameter(command, "idMenu", DbType.Byte, menuID);

            using (IDataReader dr = db.ExecuteReader(command))
            {
                while (dr.Read())
                {
                    menu = new Menus
                    {
                        Descripcion = dr.GetString(dr.GetOrdinal("Descripcion")),
                        Estado = dr.GetBoolean(dr.GetOrdinal("Estado")),
                        IdMenu = dr.GetByte(dr.GetOrdinal("IdMenu")),
                        IdMenudPadre = dr.IsDBNull(dr.GetOrdinal("IdMenudPadre")) ? byte.MinValue : dr.GetByte(dr.GetOrdinal("IdMenudPadre")),
                        Namespace = dr.GetString(dr.GetOrdinal("Namespace")),
                        Nombre = dr.GetString(dr.GetOrdinal("Nombre"))
                    };
                }
            }
            return menu;
        }
    }
}
